package lee.study.ClassesAndObjects.OuterClassAndInnerClass;

class OuterClass1 {
    public int data11 = 1;
    public static int data2 = 2;
    private int data4;

    //看作是OuterClass1的静态属性
    static class InnerClass {//如何创建一个静态内部类的对象呢？
        public int data1 = 1;
        public int data3 = 3;


        public OuterClass1 out;//属性（类的属性可以是对象）

        public InnerClass(OuterClass1 out) {//带有一个out属性的构造方法
            this.out = out;
        }

        public void func() {
           // System.out.println(data11);
            //System.out.println(data4);
            //静态内部类当中不能访问外部类的非静态数据成员。
        }

        //如果非要访问，那么可以通过传入一个外部类的对象，通过这个对象来访问
        public void func1() {
        System.out.println(this.out.data11);
        System.out.println(this.out.data4);
    }
}
}

public class StaticInnerClass {
    public static void main(String[] args) {
        //直接通过OuterClass1来new一个InnerClass，不需要先创建一个OuterClass1的对象
        //OuterClass1.InnerClass innerClass = new OuterClass1.InnerClass();
        OuterClass1 outerClass1=new OuterClass1();
        OuterClass1.InnerClass innerClass1=new OuterClass1.InnerClass(outerClass1);

        //
    }
}
